package com.bestcem.xm.txtanls.dao.mapper;

import com.bestcem.xm.txtanls.entity.mysql.ProjectEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 项目
 *
 * @author qiongyu.cui <qiongyu.cui@idiaoyan.com>
 * @version v1.0
 * @date 2021/9/27 15:01
 */
@Mapper
public interface TxtanlsProjectMapper {

    /**
     * 根据projectId查询文本分析项目信息
     *
     * @param projectId 项目id
     * @return com.bestcem.xm.txtanls.entity.mysql.ProjectEntity
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2021/09/29 13:20
     */
    ProjectEntity selectByProjectId(@Param("projectId") String projectId);

    /**
     * 根据状态获取所有满足的文本分析项目
     *
     * @param status 状态
     * @return List<ProjectEntity>
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2021/09/29 16:19
     */
    List<ProjectEntity> findAllByStatus(@Param("status") int status);

    /**
     * 获取对应用户创建的对应名字的项目
     *
     * @param projectName 项目名字
     * @param userId      用户id
     * @return com.bestcem.xm.txtanls.entity.mysql.ProjectEntity
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2021/09/29 16:21
     */
    ProjectEntity findByNameAndCreator(@Param("projectName") String projectName, @Param("userId") String userId);

    /**
     * 查询对应文本分析的总条数
     *
     * @param userId           用户id
     * @param orgId            组织id
     * @param surveyIdNullFlag surveyId是否必须为空，如果为空，则where条件后servet_id is null
     * @param statuses         默认状态条件，
     * @param status           页面状态条件，
     *                         <p>
     *                         {@link com.bestcem.xm.txtanls.constant.Constants.PROJECT_STATUS_UN_TRAIN}
     *                         {@link com.bestcem.xm.txtanls.constant.Constants.PROJECT_STATUS_TRAINING}
     *                         {@link com.bestcem.xm.txtanls.constant.Constants.PROJECT_STATUS_FINISH_TRAIN}
     *                         {@link com.bestcem.xm.txtanls.constant.Constants.PROJECT_STATUS_FAIL}
     * @param name             项目名模糊查询条件
     * @return int 总条数
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2021/09/29 16:35
     */
    int count(@Param("userId") String userId, @Param("orgId") String orgId,
              @Param("surveyIdNullFlag") boolean surveyIdNullFlag, @Param("statuses") List<Integer> statuses,
              @Param("name") String name, @Param("status") Integer status);

    /**
     * @param userId              用户id
     * @param orgId               组织id
     * @param surveyIdNullFlag    surveyId是否必须为空，如果为空，则where条件后servet_id is null
     * @param statuses            状态列表
     * @param orderByFieldAndSort 排序规则，例如 [create_time desc，update_time asd]
     * @param offset              跳跃的条数
     * @param size                需要查询的条数
     * @return java.util.List<com.bestcem.xm.txtanls.entity.mysql.ProjectEntity>
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2021/09/29 16:38
     */
    List<ProjectEntity> pageList(@Param("userId") String userId, @Param("orgId") String orgId,
                                 @Param("surveyIdNullFlag") boolean surveyIdNullFlag, @Param("statuses") List<Integer> statuses,
                                 @Param("orderByFieldAndSort") String orderByFieldAndSort, @Param("offset") int offset,
                                 @Param("size") int size, @Param("name") String name, @Param("status") Integer status);

    /**
     * 根据问卷id查询分析项目
     *
     * @param surveyId 问卷id
     * @return com.bestcem.xm.txtanls.entity.mysql.ProjectEntity
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2021/09/29 17:08
     */
    ProjectEntity selectBySurveyId(@Param("surveyId") String surveyId);


    /**
     * 新增文本分析项目信息
     *
     * @param projectEntity
     * @return java.lang.Integer
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2021/09/29 13:38
     */
    int insert(ProjectEntity projectEntity);

    /**
     * 删除文本分析项目
     *
     * @param projectId 项目id
     * @return int 删除的条数
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2021/09/29 17:15
     */
    int deleteByProjectId(@Param("projectId") String projectId);

    /**
     * 根据projectId更新文本项目内容
     *
     * @param projectEntity 文本项目内容
     * @return int 更新的条数
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2021/09/29 17:23
     */
    int updateByProjectId(ProjectEntity projectEntity);

    /**
     * 根据tableId更新文本项目内容
     *
     * @param projectEntity 文本项目内容
     * @return int 更新的条数
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2021/09/29 17:28
     */
    int updateByTableId(ProjectEntity projectEntity);


    List<ProjectEntity> findAllProjectByOrgId(@Param("orgId") String orgId, @Param("statusList") List<Integer> statusList, @Param("surveyIdNullFlag") boolean surveyIdNullFlag);

    Long updateSampleModelId(@Param("modelId") String defaultModelId);

    List<String> listOrgId();

    Long updateSetModelId(@Param("orgId") String orgId, @Param("modelId") String trainModelId);

    /**
     * 修改示例项目名称适用
     * @param projectName
     * @param ids
     * @return
     */
    long updateNameByIds(@Param("projectName") String projectName, @Param("ids") List<String> ids);
}
